package com.jt.service;/**
 * @Author 金帮嘉诚 @Date 2021-08-06 星期五 21:43
 */
/*本类用于测试*/

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jt.mapper.ItemDescMapper;
import com.jt.mapper.ItemMapper;
import com.jt.pojo.Item;
import com.jt.pojo.ItemDesc;
import com.jt.vo.ItemVO;
import com.jt.vo.PageResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;

import java.util.List;

/**
 * 知识点
 */
@Service
public class ItemServiceImpl implements ItemService {
    @Autowired
    private ItemMapper itemMapper;


    /**
     * 商品列表展现
     * 请求路径: /item/getItemList?query=&pageNum=1&pageSize=10
     * 请求类型: get
     * 请求参数: 使用pageResult对象接收
     */
    @Override
    public PageResult getItemList(PageResult pageResult) {
        //第一部分 获取page对象
        Integer pageNum = pageResult.getPageNum();
        Integer pageSize = pageResult.getPageSize();
        //参数1 page对象
        Page<Item> page = new Page<>(pageNum, pageSize);
        //参数2 queryWrapper对象
        QueryWrapper<Item> queryWrapper = new QueryWrapper<>();

        boolean queryFlag = StringUtils.hasLength(pageResult.getQuery());
        queryWrapper.like(queryFlag, "title", pageResult.getQuery());

        page = itemMapper.selectPage(page, queryWrapper);
        //第二部分 设置pageResult
        List<Item> itemList = page.getRecords();
        long total = page.getTotal();
        //设置pageResult对象 的total 和 rows
        pageResult.setRows(itemList).setTotal(total);
        return pageResult;
    }

    /**
     * 商品状态修改
     * 请求参数: 使用对象接收
     * 参数 id status
     * 返回值类型 SysResult对象
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Integer updateItemStatus(Item item) {
        Item item1 = itemMapper.selectById(item);
        item1.setStatus(item.getStatus());
        return itemMapper.updateById(item1);
    }

    @Autowired
    private FileService fileService;

    /**
     * 商品数据删除
     * 请求路径: /item/deleteItemById
     * 请求类型: delete
     * 请求参数:id
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Integer deleteItemById(Integer id) {
        int delItemDesc = itemDescMapper.deleteById(id);

        Integer delFile = 0;
        //一个image属性 可能存有多个url
        String[] urls = itemMapper.selectById(id).getImages().split(",");
        for (String virtualPath : urls
        ) {
            delFile += fileService.deleteFile(virtualPath);
        }
        return itemMapper.deleteById(id) + delItemDesc + delFile;
    }

    @Autowired
    private ItemDescMapper itemDescMapper;

    /**
     * 用户新增业务接口
     * 前端传递参数分析:ItemVo对象,其成员属性:
     * Item 商品基本信息对象封装
     * ItemDesc 商品详情信息
     * ItemParam 商品参数信息
     * <p>
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Integer saveItem(ItemVO itemVO) {
        //1.获取item对象信息
        Item item = itemVO.getItem();
        item.setStatus(true);
        Integer itemFlag = itemMapper.insert(item);//这句完成后 item才有id

        //需要设置id和item的相同
        ItemDesc itemDesc = itemVO.getItemDesc();
        //注意:理论上 输入的item的id是null 需要插入数据库之后才有id值
        //要求入库之后返回主键
        //MP如果设定了主键自增则会自动的实现数据回显//在MP中这句话才是对的
        //在Mybatis中 需要在映射文件中写sql语句 并配置generateKey主键自动自增 并设置column和propertiy对应
        itemDesc.setId(item.getId());//主键不能为null
        Integer itemDescFlag = itemDescMapper.insert(itemDesc);

        //以下是插入和返回的的语句
        if (itemFlag + itemDescFlag == 2) {
            return itemFlag;
        }
        return 0;
    }

    @Override
    public Item getItemById(Integer id) {
        return itemMapper.selectById(id);
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public Integer updateItem(Item item) {
        Item item1 = itemMapper.selectById(item);
        item1.setTitle(item.getTitle()).setSellPoint(item.getSellPoint()).setPrice(item.getPrice()).setNum(item.getNum());
        return itemMapper.updateById(item1);
    }
}
